<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta property="og:type" content="website">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="https://goofyer.gitee.io/notes-on-computer-expertise/page/10/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:locale" content="en_US">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/notes-on-computer-expertise/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/notes-on-computer-expertise/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/notes-on-computer-expertise/css/style.css">

  
    
<link rel="stylesheet" href="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/notes-on-computer-expertise/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/">Home</a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/notes-on-computer-expertise/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://goofyer.gitee.io/notes-on-computer-expertise"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main">
  
    <article id="post-Java/第九章 java与网络编程" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B9%9D%E7%AB%A0%20java%E4%B8%8E%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:32:51.160Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第九章-java与网络编程"><a href="#第九章-java与网络编程" class="headerlink" title="第九章 java与网络编程"></a>第九章 java与网络编程</h2>
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B9%9D%E7%AB%A0%20java%E4%B8%8E%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/" data-id="cl403sxr4001cf8vu6p28bt16" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第八章 多线程" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%85%AB%E7%AB%A0%20%E5%A4%9A%E7%BA%BF%E7%A8%8B/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:32:42.973Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第八章-多线程"><a href="#第八章-多线程" class="headerlink" title="第八章 多线程"></a>第八章 多线程</h2><h3 id="子主题-1"><a href="#子主题-1" class="headerlink" title="子主题 1"></a>子主题 1</h3><ul>
<li><p>线程的启动</p>
<ul>
<li><p>调用的是t.run();方法</p>
<ul>
<li>调用run方法就是普通的方法调用而已，所以肯定是先执行pong()再执行System.out.print(“ping”);</li>
</ul>
</li>
<li><p>调用的是t.start()方法</p>
<ul>
<li>线程变为就绪状态，什么时候开始执行时不确定的，可能是主程序先继续执行，也可能是新线程先执行。</li>
</ul>
</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%85%AB%E7%AB%A0%20%E5%A4%9A%E7%BA%BF%E7%A8%8B/" data-id="cl403sxra001of8vu6xqydmv2" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第七章 流和文件" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E6%B5%81%E5%92%8C%E6%96%87%E4%BB%B6/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:32:32.783Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第七章-流和文件"><a href="#第七章-流和文件" class="headerlink" title="第七章 流和文件"></a>第七章 流和文件</h2><h3 id="7-1文件管理基础"><a href="#7-1文件管理基础" class="headerlink" title="7.1文件管理基础"></a>7.1文件管理基础</h3><ul>
<li><p>1.File构造方法</p>
<ul>
<li><p>File(File parent, String child)</p>
<ul>
<li>从父抽象路径名和子路径名字符串创建新的 File实例；</li>
</ul>
</li>
<li><p>File(String pathname)</p>
<ul>
<li>通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例；</li>
</ul>
</li>
<li><p>File(String parent, String child)</p>
<ul>
<li>从父路径名字符串和子路径名字符串创建新的 File实例；</li>
</ul>
</li>
</ul>
</li>
<li><p>2.获取路径或文件名</p>
<ul>
<li><p>String getName()</p>
<ul>
<li>返回文件或目录的名称</li>
</ul>
</li>
<li><p>String getPath()</p>
<ul>
<li>返回路径名（构造时候的路径）</li>
</ul>
</li>
<li><p>String getAbsolutePath()</p>
<ul>
<li>返回绝对路径名（全路径）</li>
</ul>
</li>
<li><p>String getCanonicalPath()</p>
<ul>
<li>返回路径名的规范形式</li>
</ul>
</li>
<li><p>String getParent()</p>
<ul>
<li>返回父目录的路径名</li>
</ul>
</li>
</ul>
</li>
<li><p>3.读取属性</p>
<ul>
<li><p>boolean canExecute()</p>
<ul>
<li>测试是否为可执行文件</li>
</ul>
</li>
<li><p>boolean exists()</p>
</li>
<li>boolean canWrite()</li>
<li>boolean canRead()</li>
<li>boolean isHidden()</li>
<li>boolean isFile()</li>
<li>boolean isDirectory()</li>
<li><p>Long lastModeified()</p>
<ul>
<li>获取文件最近一次修改时间</li>
</ul>
</li>
<li><p>Long length()</p>
</li>
</ul>
</li>
<li><p>4.设置属性</p>
<ul>
<li>Long setlastModeified()</li>
<li>boolean setExecutable()</li>
<li>boolean exists()</li>
<li>boolean setWritable()</li>
<li>boolean setReadable()</li>
<li>boolean setReadOnly()</li>
</ul>
</li>
<li><p>5.文件和目录操作</p>
</li>
<li><p>7.1.2案例7-1递归显示或删除文件</p>
<ul>
<li>技术</li>
<li>使用file对象的isfile()判断是否为文件，如果是文件直接进行显示或删除操作，否则，在使用isDirectory判断是否为目录，是目录通过listFiles获得文件或者子目录 递归</li>
<li>步骤</li>
<li><p>第一步 建立DemoFile类</p>
<ul>
<li>public class DemoFile {<br>private static void deleteFile(File file) {<br>if (file != null) {<br>  if (file.isFile())<pre><code>  file.delete();
</code></pre>  else if (file.isDirectory()) {<pre><code>  File files[] = file.listFiles();
  for (int i = 0; i &lt; files.length; i++)
      deleteFile(files[i]);
  file.delete();
</code></pre>  }<br>}<br>}</li>
</ul>
<p>private static void listFile(File file, int level)<br>{<br>  if (file != null)<br>  {</p>
<pre><code>  if (file.isFile())
      System.out.println(String.format(&quot;&quot;));
  else if (file.isDirectory()) &#123;
      File files[] = file.listFiles();
      System.out.println(String.format(&quot;&quot;));
      for (int i = 0; i &lt; files.length; i++);
      listFile(files[i],level+1);
  &#125;
</code></pre><p>  }<br>}<br>private  static String aaa(int n)<br>{<br>  StringBuilder sb=new StringBuilder();<br>  for(int i=0;i&lt;n;i++)</p>
<pre><code>  sb.append(&quot; &quot;);
</code></pre><p>  return sb.toString();<br>}</p>
<p>public static void main(String[]args)<br>{<br>  File file=new File(“”);<br>  listFile(file,1);<br>  deleteFile(file);<br>  listFile(file,1);<br>}<br>}</p>
</li>
</ul>
</li>
<li><p>7.1.3过滤器与文件选择对话框</p>
<ul>
<li><p>1.FileFilter接口</p>
<ul>
<li><p>MyFilter类为自定义文件过滤器，实现了FileFilter接口，FileFilter接口中包含一个accept（File file）方法，该方法会对指定的File中的子目录和文件进行迭代，如果返回true，则list方法会列出该目录或者文件。</p>
<ul>
<li>class MyFilter implements FileFilter{</li>
</ul>
</li>
</ul>
<p>@Override<br>public boolean accept(File pathname) {<br>  return pathname.getName().endsWith(“.jar”)&amp;&amp;pathname.isFile();<br>}</p>
</li>
</ul>
</li>
</ul>
<p>}</p>
<pre><code>- 2.FilenameFilter接口

    - 一、FilenameFilter介绍

        - Java.io.FilenameFilter是文件名过滤器，用来过滤不符合规格的文件名，并返回合格的文件；
        - 一般地：

            - (1)String[] fs = f.list();
            - (2)File[] fs = f.listFiles();
            - 这两个方法返回f下的所有文件或目录；

                - FilenameFilter用来把符合要求的文件或目录返回；
                - 因此可以调用：

                    - (1)String []fs = f.list(FilenameFilter filter);;
                    - (2)File[]fs = f.listFiles(FilenameFilter filter);

    - 二、FilenameFilter的使用举例

        - //System.getProperty(&quot;catalina.home&quot;)获取到Tomcat的根路径，比如：D:\Program Files (x86)\tomcat\apache-tomcat-7.0.70-windows-x86\apache-tomcat-7.0.70
</code></pre><p>File dataDirectory = new File(System.getProperty(“catalina.home”) + File.separator + “test” + File.separator + “conf”);// 这里获取的是：D:\Program Files (x86)\tomcat\apache-tomcat-7.0.70-windows-x86\apache-tomcat-7.0.70\test\conf<br>        // 数据源文件必定要是properties类型。<br>        File[] dataFiles = dataDirectory.listFiles(new FilenameFilter() {<br>//以config_db开头，文件后缀为.properties的将被选出来，其余被过滤掉<br>            @Override<br>            public boolean accept(File dir, String name) {<br>                String fileName = name.toLowerCase();</p>
<pre><code>            if (fileName.endsWith(&quot;.properties&quot;)) &#123;
                if(fileName.startsWith(&quot;config_db&quot;)) &#123;
                    return true;
                &#125;
            &#125;
            return false;
        &#125;
    &#125;);
</code></pre><h3 id="7-2字符流与文本文件读写"><a href="#7-2字符流与文本文件读写" class="headerlink" title="7.2字符流与文本文件读写"></a>7.2字符流与文本文件读写</h3><ul>
<li>字符流以字符为基本单位处理数据</li>
<li><p>7.2.1字符流简介</p>
<ul>
<li>从reader与writer派生</li>
<li><p>字符流的层次结构</p>
<ul>
<li><p>Reader</p>
<ul>
<li><p>BufferedReader</p>
<ul>
<li>LineNumberReader</li>
</ul>
</li>
<li><p>CharArrayReader</p>
</li>
<li><p>InputStreamReader</p>
<ul>
<li>FileReader</li>
</ul>
</li>
<li><p>FilterReader</p>
<ul>
<li>PushbackReader</li>
</ul>
</li>
<li><p>PipedReader</p>
</li>
<li>StringReader</li>
</ul>
</li>
<li><p>Writer</p>
<ul>
<li>BufferedWriter</li>
<li>CharArrayWriter</li>
<li><p>OutputStreamWriter</p>
<ul>
<li>FileWriter</li>
</ul>
</li>
<li><p>FilterWriter</p>
</li>
<li>PiperWriter</li>
<li>StringWriter</li>
<li>PrintWriter</li>
</ul>
</li>
</ul>
</li>
<li><p>1.Reader类</p>
<ul>
<li>abstract  void  close() //关闭该流并释放与之关联的所有资源。</li>
<li>void  mark(int readAheadLimit) //标记流中的当前位置。</li>
<li>boolean  markSupported() //判断此流是否支持 mark() 操作。</li>
<li>int  read() //读取单个字符。</li>
<li>int  read(char[] cbuf) //将字符读入数组。</li>
<li>abstract  int  read(char[] cbuf, int off, int len) //将字符读入数组的某一部分。</li>
<li>int  read(CharBuffer target) //试图将字符读入指定的字符缓冲区。</li>
<li>boolean  ready() //判断是否准备读取此流。</li>
<li>void  reset() //重置该流。</li>
<li>long  skip(long n) //跳过字符。</li>
</ul>
</li>
<li><p>2 writer类</p>
<ul>
<li>Writer  append(char c) 将指定字符添加到此 writer。</li>
<li>Writer  append(CharSequence csq) 将指定字符序列添加到此 writer。</li>
<li>Writer  append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable。</li>
<li>abstract  void  close() 关闭此流，但要先刷新它。</li>
<li>abstract  void  flush() 刷新该流的缓冲。</li>
<li>void  write(char[] cbuf) 写入字符数组。</li>
<li>abstract  void  write(char[] cbuf, int off, int len) 写入字符数组的某一部分。</li>
<li>void  write(int c) 写入单个字符。</li>
<li>void  write(String str) 写入字符串。</li>
<li>void  write(String str, int off, int len) 写入字符串的某一部分。</li>
</ul>
</li>
</ul>
</li>
<li><p>7.2.2文件字符流</p>
<ul>
<li>1 文件读字符流</li>
<li>2 文件写字符流</li>
<li>fileReader</li>
<li>fileWriter</li>
</ul>
</li>
</ul>
<h3 id="7-4-数据流和对象流"><a href="#7-4-数据流和对象流" class="headerlink" title="7.4 数据流和对象流"></a>7.4 数据流和对象流</h3><ul>
<li><p>7.4.1 数据流简介</p>
<ul>
<li>数据流易于机器无关的方式读取和写数据，这里数据指的是JAVA的基本数据类型和string 基本数据类型包括byte int char long float double boolean 和short</li>
</ul>
</li>
<li><p>7.4.2对象流简介</p>
</li>
<li>java通关对象的串行化来实现保存对象的功能</li>
</ul>
<h3 id="子主题-6"><a href="#子主题-6" class="headerlink" title="子主题 6"></a>子主题 6</h3>
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E6%B5%81%E5%92%8C%E6%96%87%E4%BB%B6/" data-id="cl403sxr00013f8vu56642j1u" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第六章 java数据库编程" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%85%AD%E7%AB%A0%20java%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BC%96%E7%A8%8B/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:32:23.182Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第六章-java数据库编程"><a href="#第六章-java数据库编程" class="headerlink" title="第六章 java数据库编程"></a>第六章 java数据库编程</h2><h3 id="6-1JDBC"><a href="#6-1JDBC" class="headerlink" title="6.1JDBC"></a>6.1JDBC</h3><ul>
<li><p>6.1.1JDBC介绍</p>
<ul>
<li>Java数据库连接，（Java Database Connectivity，简称JDBC）是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口，提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。</li>
<li><p>jdbc作用</p>
<ul>
<li>建立于数据库的连接</li>
<li>向数据库发出查询请求</li>
<li>处理数据库返回结果</li>
</ul>
</li>
<li><p>6.1.2JDBC重要类和接口</p>
<ul>
<li><p>Connection接口</p>
<ul>
<li>Connection接口代表与特定的数据库的连接，在连接上下文中执行SQL语句并返回结果</li>
<li><p>常用方法</p>
<ul>
<li><p>createStatement()    </p>
<ul>
<li>创建Statement对象</li>
</ul>
</li>
<li><p>createStatement(int resultSetType,int resultSetConcurrency)</p>
<ul>
<li>创建一个Statement对象，该对象将生成具有给定类型、并发性和可保存性的ResultSet对象</li>
</ul>
</li>
<li><p>preparedStatement()    </p>
<ul>
<li>创建预处理对象preparedStatement</li>
</ul>
</li>
<li><p>isReadOnly()    </p>
<ul>
<li>查看当前Connection对象的读取模式是否是只读形式</li>
</ul>
</li>
<li><p>setReadOnly()    </p>
<ul>
<li>设置当前Connection对象的读写模式，默认是非只读模式</li>
</ul>
</li>
<li><p>commit()    </p>
<ul>
<li>使所有上一次提交/回滚后进行的更改成为持久更改，并释放此Connection对象当前持有的所有数据库锁</li>
</ul>
</li>
<li><p>roolback()    </p>
<ul>
<li>取消在当前事务中进行的所有更改，并释放此Connection对象当前持有的所有数据库锁</li>
</ul>
</li>
<li><p>close()    </p>
<ul>
<li>立即释放此Connection对象的数据库和JDBC资源，而不是等待它们被自动释放</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Statement接口</p>
<ul>
<li>Statement接口用于在已经建立的基础上向数据库发送SQL语句</li>
<li><p>常用方法</p>
<ul>
<li><p>execute(String sql)    </p>
<ul>
<li>执行静态的SELECT语句，该语句可能返回多个结果集</li>
</ul>
</li>
<li><p>executeQuery(String sql)    </p>
<ul>
<li>执行给定的SQL语句，该语句返回单个ResultSet对象</li>
</ul>
</li>
<li><p>clearBatch()    </p>
<ul>
<li>清空此Statement对象的当前SQL命令列表</li>
</ul>
</li>
<li><p>executeBatch()    </p>
<ul>
<li>将一批命令提交给数据库来执行，如果全部命令执行成功，则返回更新计数组成的数组。数组元素的排序与SQL语句的添加顺序对应</li>
</ul>
</li>
<li><p>addBatch()    </p>
<ul>
<li>将给定的SQL命令添加到此Statement对象的当前命令列表中。如果驱动程序不支持批量处理，将抛出异常</li>
</ul>
</li>
<li><p>close()    </p>
<ul>
<li>释放Statement实例占用的数据库和JDBC资源</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>PreparedStatement接口</p>
<ul>
<li>PreparedStatement接口用来动态地执行SQL语句</li>
<li><p>常用方法</p>
<ul>
<li><p>setInt(int index,int k)    </p>
<ul>
<li>将指定位置的参数设置为int值</li>
</ul>
</li>
<li><p>setFloat(int index,float k)    </p>
<ul>
<li>将指定位置的参数设置为float值</li>
</ul>
</li>
<li><p>setLong(int index,long k)</p>
<ul>
<li>将指定位置的参数设置为long值</li>
</ul>
</li>
<li><p>setDouble(int index,double k)    </p>
<ul>
<li>将指定位置的参数设置为double值</li>
</ul>
</li>
<li><p>setBoolean(int index,boolean k)    </p>
<ul>
<li>将指定位置的参数设置为boolean值</li>
</ul>
</li>
<li><p>setDate(int index,date date)    </p>
<ul>
<li>将指定位置的参数设置为对应的date值</li>
</ul>
</li>
<li><p>executeQuery()</p>
<ul>
<li>在此PreparedStatement对象中执行SQL查询，并返回该查询生成的ResultSet对象</li>
</ul>
</li>
<li><p>setString(int index,String s)</p>
<ul>
<li>将指定位置的参数设置为对应的String值</li>
</ul>
</li>
<li><p>setNull(int index,intsqlType)</p>
<ul>
<li>将指定位置的参数设置为SQL NULL</li>
</ul>
</li>
<li><p>executeUpdate()</p>
<ul>
<li>执行前面包含的参数的动态INSERT、UPDATE或DELETE语句</li>
</ul>
</li>
<li><p>clearParameters()</p>
<ul>
<li>清除当前所有参数的值</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>DriverManager类</p>
<ul>
<li>DriverManager类用来管理数据库中的所有驱动程序。它是JDBC的管理层，作用于用户和驱动程序之间，跟踪可用的驱动程序，并在数据库的驱动程序之间建立连接</li>
<li><p>常用方法</p>
<ul>
<li><p>getConnection(String url,String user,String passward)</p>
<ul>
<li>指定三个入口参数(数据库的URL、用户名、密码)来获取与数据库的连接</li>
</ul>
</li>
<li><p>setLoginTimeout()</p>
<ul>
<li>获取驱动程序试图登录到某一数据库时可以等待的最长时间，单位为秒</li>
</ul>
</li>
<li><p>println(String message)</p>
<ul>
<li>将一条消息打印到当前的JDBC日志流中</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>ResultSet接口</p>
<ul>
<li>ResultSet接口类似于一个临时表，用来暂时存放数据库查询操作所获得的结果集</li>
<li><p>常用方法</p>
<ul>
<li><p>getInt()</p>
<ul>
<li>以int形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL，则返回值是0</li>
</ul>
</li>
<li><p>getFloat()</p>
<ul>
<li>以float形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL，则返回值是0</li>
</ul>
</li>
<li><p>getDate()</p>
<ul>
<li>以data形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL，则返回值是null</li>
</ul>
</li>
<li><p>getBoolean()</p>
<ul>
<li>以boolean形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL，则返回值是null</li>
</ul>
</li>
<li><p>getString()</p>
<ul>
<li>以String形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL，则返回值是null</li>
</ul>
</li>
<li><p>getObject()</p>
<ul>
<li>以Object形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL，则返回值是null</li>
</ul>
</li>
<li><p>first()</p>
<ul>
<li>将指针移到当前记录的第一行</li>
</ul>
</li>
<li><p>last()</p>
<ul>
<li>将指针移到当前记录的最后一行</li>
</ul>
</li>
<li><p>next()</p>
<ul>
<li>将指针向下移一行</li>
</ul>
</li>
<li><p>beforeFirst()</p>
<ul>
<li>将指针移到集合的开头</li>
</ul>
</li>
<li><p>afterLast()</p>
<ul>
<li>将指针移到集合的尾部</li>
</ul>
</li>
<li><p>absolute(int index)</p>
<ul>
<li>将指针移到ResultSet给定编号的行</li>
</ul>
</li>
<li><p>isFrist()</p>
<ul>
<li>判断指针是否位于当前ResultSet集合的第一行。如果是返回true，否则返回false</li>
</ul>
</li>
<li><p>isLast()</p>
<ul>
<li>判断指针是否位于当前ResultSet集合的最后一行。如果是返回true，否则返回false</li>
</ul>
</li>
<li><p>updateInt()</p>
<ul>
<li>用int值更新指定列</li>
</ul>
</li>
<li><p>updateFloat()</p>
<ul>
<li>用float值更新指定列</li>
</ul>
</li>
<li><p>updateLong()</p>
<ul>
<li>用指定的long值更新指定列</li>
</ul>
</li>
<li><p>updateString()</p>
<ul>
<li>用指定的string值更新指定列</li>
</ul>
</li>
<li><p>updateObject()</p>
<ul>
<li>用Object值更新指定列</li>
</ul>
</li>
<li><p>updateNull()</p>
<ul>
<li>将指定的列值修改为NULL</li>
</ul>
</li>
<li><p>updateDate()</p>
<ul>
<li>用指定的date值更新指定列</li>
</ul>
</li>
<li><p>updateDouble()</p>
<ul>
<li>用指定的double值更新指定列</li>
</ul>
</li>
<li><p>getrow()</p>
<ul>
<li>查看当前行的索引号</li>
</ul>
</li>
<li><p>insertRow()</p>
<ul>
<li>将插入行的内容插入到数据库</li>
</ul>
</li>
<li><p>updateRow()</p>
<ul>
<li>将当前行的内容同步到数据表</li>
</ul>
</li>
<li><p>deleteRow()</p>
<ul>
<li>删除当前行，但不同步到数据库中，而是在执行close()方法后同步到数据库</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>6.2创建SQL数据库</p>
<ul>
<li><p>学生管理系统数据库设计</p>
<ul>
<li><p>数据表介绍</p>
<ul>
<li><p>stu_user</p>
<ul>
<li>用户</li>
</ul>
</li>
<li><p>stu__major</p>
<ul>
<li>专业</li>
</ul>
</li>
<li><p>stu_student</p>
<ul>
<li>学生</li>
</ul>
</li>
<li><p>stu_cource</p>
<ul>
<li>课程</li>
</ul>
</li>
<li><p>stu_score</p>
<ul>
<li>成绩</li>
</ul>
</li>
</ul>
</li>
<li><p>数据库操作</p>
<ul>
<li><p>第一步 用SQL脚本创建数据表</p>
<ul>
<li>Create database stu;<br>Use stu;<br>/<em>创建用户表</em>/<br>Create table stu_user(<br>user_id int auto_increment primary key,<br>user_name varchar(30) not null,<br>user_pwd varchar(30),<br>user_datetime timestamp<br>);<br>/<em>创建专业表</em>/<br>Create table stu_major(<br>major_id int auto_increment primary key,<br>major_name varchar(30) not null unique<br>);<br>/<em>创建课程表</em>/<br>Create table stu_course<br>(<br>course_no varchar(6) primary key,<br>course_name varchar(30) not null unique,<br>course_teacher varchar(30)<br>);<br>/<em>创建学生表</em>/<br>Create table stu_student<br>(<br>student_no varchar(8) primary key,<br>major_id int not null references stu_major(major_id),<br>student_name varchar(30) not null,<br>student_sex varchar(2) not null,<br>student_birthDate datetime,<br>student_isMember bool,<br>student_address varchar(100),<br>student_resume text<br>);<br>/<em>创建成绩表</em>/<br>Create table stu_score<br>(<br>score_no varchar(8) references stu_student(student_no),<br>course_no varchar(30) references stu_cource(course_no),<br>score_score decimal(7,2) not null,<br>Primary key (score_no,course_no)<br>);</li>
</ul>
</li>
<li><p>第二部 给数据表添加新元素</p>
<ul>
<li>Insert into stu_user(user_name,user_pwd) values(<code>yang</code>,<code>1234</code>);<br>Insert into stu_major(major_name) values(<code>计算机科学与技术</code>);<br>Insert into stu_major(major_name) values(<code>电子</code>);<br>Insert into stu_major(major_name) values(<code>数据通信</code>);<br>Insert into stu_cource values(<code>120011</code>,<code>C语言</code>,<code>杨老师</code>);<br>Insert into stu_cource values(<code>120012</code>,<code>JAVA</code>,<code>张老师</code>);<br>Insert into stu_cource values(<code>120013</code>,<code>C语言</code>,<code>猫老师</code>);<br>Insert into stu_student(stu_no,major_id,stu_name,stu_sex,stu_birthDate,stu_isMember,stu_address) values(<code>101</code>,1,<code>张晓明</code>,<code>男</code>,1919-10-3<code>,1,</code>北京<code>);
Insert into stu_student(stu_no,major_id,stu_name,stu_sex,stu_birthDate,stu_isMember,stu_address) values(</code>102<code>,1,</code>张埃迪<code>,</code>男<code>,1979-10-3</code>,0,<code>北京</code>);<br>Insert into stu_student(stu_no,major_id,stu_name,stu_sex,stu_birthDate,stu_isMember,stu_address) values(<code>201</code>,2,<code>汪小菲</code>,<code>女</code>,1929-10-3<code>,1,</code>大连<code>);
Insert into stu_student(stu_no,major_id,stu_name,stu_sex,stu_birthDate,stu_isMember,stu_address) values(</code>202<code>,2,</code>滥用西<code>,</code>男<code>,1939-10-3</code>,0,<code>大连</code>);<br>Insert into stu_student(stu_no,major_id,stu_name,stu_sex,stu_birthDate,stu_isMember,stu_address) values(<code>203</code>,3,<code>貔貅</code>,<code>女</code>,1959-10-3<code>,1,</code>北京<code>);
Insert into stu_score values(</code>101<code>,</code>120011<code>,65);
Insert into stu_score values(</code>101<code>,</code>120012<code>,35);
Insert into stu_score values(</code>101<code>,</code>120013<code>,75);
Insert into stu_score values(</code>102<code>,</code>120011<code>,65);
Insert into stu_score values(</code>102<code>,</code>120012<code>,35);
Insert into stu_score values(</code>102<code>,</code>120013<code>,75);
Insert into stu_score values(</code>201<code>,</code>120011<code>,65);
Insert into stu_score values(</code>201<code>,</code>120012<code>,35);
Insert into stu_score values(</code>201<code>,</code>120013<code>,75);
Insert into stu_score values(</code>202<code>,</code>120011<code>,65);
Insert into stu_score values(</code>202<code>,</code>120012<code>,35);
Insert into stu_score values(</code>202<code>,</code>120013<code>,75);
Insert into stu_score values(</code>203<code>,</code>120011<code>,65);
Insert into stu_score values(</code>203<code>,</code>120012<code>,35);
Insert into stu_score values(</code>203<code>,</code>120013`,75);</li>
</ul>
</li>
</ul>
</li>
<li><p>JAVA连接数据库</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="6-3-3MVC设计模式"><a href="#6-3-3MVC设计模式" class="headerlink" title="6.3.3MVC设计模式"></a>6.3.3MVC设计模式</h3><ul>
<li><p>Model：封装与应用程序的业务逻辑相关的数据以及对数据的处理方法</p>
<ul>
<li>数据模型</li>
<li>数据访问模型</li>
</ul>
</li>
<li><p>View：通过用户交互或数据展现的界面，由控制器调度</p>
</li>
<li>Controller：根据用户请求调用模型获取数据，通过使徒呈现给用户</li>
<li>案例6-2按MVC模式设计学生管理系统</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%85%AD%E7%AB%A0%20java%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BC%96%E7%A8%8B/" data-id="cl403sxrb001pf8vu0vw1ftxt" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第四章 数组" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%95%B0%E7%BB%84/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:27:36.978Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第四章-数组"><a href="#第四章-数组" class="headerlink" title="第四章 数组"></a>第四章 数组</h2><h3 id="4-1-数组"><a href="#4-1-数组" class="headerlink" title="4.1 数组"></a>4.1 数组</h3><ul>
<li><p>4.1.1数组的概念</p>
<ul>
<li>数组是一种引用数据类型</li>
<li>数组要经过定义分配内存及赋值后才能使用</li>
</ul>
</li>
<li><p>4.1.2 数组的定义</p>
<ul>
<li><ol>
<li><p>一维数组</p>
<ul>
<li><p>定义</p>
<ul>
<li>有一个下表的数组</li>
<li>int Array[]={1,2,3};//定义一个整型数组<br>String Array[]={1,2,3};//定义一个字符串数组</li>
</ul>
</li>
<li><p>创建</p>
<ul>
<li>直接赋值</li>
<li>用new建立数组</li>
</ul>
</li>
<li><p>引用</p>
<ul>
<li>[]</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
<li><ol>
<li><p>多维数组</p>
<ul>
<li><p>定义</p>
<ul>
<li>类型 数据名[][]</li>
</ul>
</li>
<li><p>创建</p>
<ul>
<li>直接赋值</li>
<li>new</li>
</ul>
</li>
<li><p>引用</p>
<ul>
<li>[][]</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
</ul>
</li>
<li><p>案例</p>
<ul>
<li><p>成绩排序和统计</p>
<ul>
<li><p>技术要点</p>
<ul>
<li>单独定义一个类来处理成绩问题，在该类中用数组存放成绩，在构造方法中根据分数创建数组</li>
</ul>
</li>
<li><p>代码</p>
<p>/<em><br>设计程序 能对学生成绩进行统计 并把各个分数段的人数统计出来
 </em>/<br>public class 成绩排序和统计 {</p>
<pre><code>private float scores[];

public 成绩排序和统计(int n) &#123;
    scores = new float[n];
&#125;

//输入成绩
public void input() &#123;
    for (int i = 0; i &lt; scores.length; i++) &#123;
        Scanner in = new Scanner(System.in);
        scores[i] = in.nextFloat();
    &#125;
&#125;

//输出成绩
public void output() &#123;
    for (int i = 0; i &lt; scores.length; i++) &#123;
        System.out.println(scores[i]);
        if (i &lt; scores.length - 1)
            System.out.println(&#39;,&#39;);
    &#125;
&#125;//从高到低排序

public sort(int n) &#123;
    for (int i = 0; i &lt; scores.length; i++) &#123;
        for (int j = i + 1; j &lt; scores.length; j++) &#123;
            if (scores[i] &lt; scores[j]) &#123;
                float c = scores[i];
                scores[i] = scores[j];
                scores[j] = c;
            &#125;
        &#125;
    &#125;
&#125;//统计成绩

public void stat(int n) &#123;
    int s[] = new int[11];
    for (int i = 0; i &lt; scores.length; i++) &#123;
        int j = (int) (scores[i] / 10);
        s[j]++;
        scores = new float[n];
    &#125;
    for (int i = 0; i &lt; s.length; i++) &#123;
        System.out.println(&quot;#%3s~%3s:%d&quot;, i * 10, (i + 1) * 10 - 1, s[i]);
    &#125;
&#125;
</code></pre><p>}</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="4-2集合"><a href="#4-2集合" class="headerlink" title="4.2集合"></a>4.2集合</h3><ul>
<li><p>4.2.1java集合框架</p>
<ul>
<li>util包</li>
</ul>
</li>
<li><p>4.2.2Collection接口常用方法</p>
<ul>
<li>a.add(1);<br>a.contains(a);<br>a.isEmpty();<br>a.iterator();<br>a.remove(3);<br>a.size();</li>
</ul>
</li>
<li><p>4.2.3遍历Collection</p>
<ul>
<li>for循环</li>
<li>迭代器</li>
</ul>
</li>
</ul>
<h3 id="4-3集"><a href="#4-3集" class="headerlink" title="4.3集"></a>4.3集</h3><ul>
<li><p>HashSet类</p>
<ul>
<li>哈希表</li>
</ul>
</li>
<li><p>TreeSet类</p>
</li>
</ul>
<h3 id="4-4列表"><a href="#4-4列表" class="headerlink" title="4.4列表"></a>4.4列表</h3><ul>
<li><p>序的集合，可以精确控制每个元素插入的位置</p>
<ul>
<li>索引</li>
<li>可以重复元素</li>
</ul>
</li>
<li><p>List接口</p>
<ul>
<li><p>ArrayList类</p>
<ul>
<li>可变大小的列表</li>
</ul>
</li>
<li><p>案例</p>
<ul>
<li><p>竞赛评分程序</p>
<ul>
<li><p>技术要点</p>
<ul>
<li>利用Arraylist存储选手对象，使用工具类Collect的Sort方法队选手进行排序，采用匿名类方法定义比较规则</li>
</ul>
</li>
<li><p>代码</p>
<ul>
<li><p>创建对象类</p>
<p>public class Player {</p>
<pre><code>private final String playerId;//选手号码
private final String playerName;//选手名称
</code></pre><p>private  int order;//比赛次序<br> private float scores[];   //选手分数列表</p>
<pre><code>public Player(String playerId,String playerName)&#123;
    this.playerId=playerId;
    this.playerName=playerName;
&#125;
public String getPlayerId()
&#123;return playerId;&#125;
public String getPlayerName()
&#123;return playerName;&#125;
public int getOrder()
&#123;return order;&#125;
public void setOrder(int order)
&#123;this.order=order;&#125;
public void inputScore(int judgeNum)
&#123;
    this.scores=new float[judgeNum];
    Scanner in=new Scanner(System.in);
    System.out.println(&quot;输入&quot;+playerId+&quot;号选手的得分&quot;);
    for(int i=0;i&lt;judgeNum;i++)
        scores[i]=in.nextFloat();
&#125;
public float getScore()
&#123;
    float totalScore=0f;
    int mini=0;
    int maxi=0;
    for(int i=1;i&lt;scores.length;i++)
    &#123;
        totalScore+=scores[i];
        if(scores[i]&gt;scores[maxi])
            maxi=i;
        if(scores[i]&lt;scores[mini])
            mini=i;
    &#125;
    totalScore=(totalScore-scores[maxi]-scores[mini])/(scores.length-2);
&#125;
@Override
public String toString()
&#123;
    return String.format(&quot;%!$-10s%2$-15s%3$-10.2f&quot;,playerId,playerName,getScore())
&#125;
</code></pre><p>}</p>
</li>
<li><p>CMSystem类</p>
<p>public class CMSystem {</p>
<pre><code>private List&lt;Player&gt; playerList;

public CMSystem() &#123;
    this.playerList = new ArrayList&lt;&gt;();
&#125;

public void addPlayer(Player player) &#123;
    playerList.add(player);
&#125;

public void deletePlayer(int index) &#123;
    playerList.remove(index);
&#125;

public void sortByScore() &#123;
    Collections.sort(playerList, new Comparator&lt;Player&gt;()//匿名类
    &#123;
        @Override
        public int compare(Player o1, Player o2) &#123;
            if (o1.getScore() &lt;= o2.getScore())
                return 1;
            else
                return -1;
        &#125;
    &#125;);
&#125;

public void sortByOrder() &#123;
    Collections.sort(playerList, new Comparator&lt;Player&gt;()//匿名类
    &#123;
        @Override
        public int compare(Player o1, Player o2) &#123;
            if (o1.getOrder() &lt;= o2.getOrder())
                return 1;
            else
                return -1;
        &#125;
    &#125;);
&#125;

public void inputScore(int judgeNum) &#123;
    sortByOrder();
    for (Player p : playerList)
        p.inputScore(judgeNum);
&#125;

public void showAllPlayerInfo() &#123;
    for (Player p : playerList)
        System.out.println(p);
&#125;
</code></pre><p>}</p>
</li>
<li><p>子主题 3</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Vector类</p>
</li>
</ul>
<h3 id="4-5映射"><a href="#4-5映射" class="headerlink" title="4.5映射"></a>4.5映射</h3><ul>
<li><p>定义</p>
<ul>
<li>映射是由键值对组成 Key不能重复，每对key只能映射一个value</li>
</ul>
</li>
</ul>
<h3 id="4-5-1Map接口"><a href="#4-5-1Map接口" class="headerlink" title="4.5.1Map接口"></a>4.5.1Map接口</h3><ul>
<li>独立接口，不继承Collection接口</li>
<li><p>方法</p>
<ul>
<li>clear()</li>
<li>containsKey()</li>
<li>containsValue()</li>
<li>entrySet()</li>
<li>get()</li>
<li>isEmpty()</li>
<li>keySet()</li>
<li>put()</li>
<li>remove()</li>
<li>size()</li>
<li>values()</li>
</ul>
</li>
<li><p>HashMap类</p>
</li>
<li><p>4.3案例 网络书城的购物车类</p>
<ul>
<li><p>技术要点</p>
<ul>
<li>定义一个图书类Book，存书的信息</li>
<li>定义一个条目类CartItem表示购物车的单个条目，存储书及数量</li>
<li>定义一个购物车类Cart，用HashMap存储数目</li>
<li>使用containKey方法判断书是否在购物车中</li>
</ul>
</li>
<li><p>代码</p>
</li>
<li><p>book类</p>
<p>public class Book {</p>
<pre><code>private String bookNo;
private String bookName;
private float bookPrice;

public Book() &#123;

&#125;

public Book(String bookNo,String bookName,float bookPrice)
&#123;
    this.bookName=bookName;
    this.bookNo=bookNo;
    this.bookPrice=bookPrice;
&#125;
</code></pre><p>}</p>
</li>
<li><p>CartItem类</p>
<p>public class CartItem {</p>
<pre><code>private Book book;
private int count;

public CartItem() &#123;
&#125;

public CartItem(Book book, int count) &#123;
    this.book = book;
    this.count = count;
&#125;

@Override
public  String toString()
&#123;
    return String.format(&quot;&quot;);
&#125;
</code></pre><p>}</p>
</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%95%B0%E7%BB%84/" data-id="cl403sxrg0020f8vu3beh65za" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第三章 面向对象编程" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:27:25.078Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第三章-面向对象编程"><a href="#第三章-面向对象编程" class="headerlink" title="第三章 面向对象编程"></a>第三章 面向对象编程</h2><h3 id="对象和封装"><a href="#对象和封装" class="headerlink" title="对象和封装"></a>对象和封装</h3><ul>
<li><p>1.类和对象的概念</p>
<ul>
<li>1，类是对某一事物的描述，是抽象的，概念上的定义。</li>
<li>2，对象是实际存在的该事物的个体，是具体的、现实的。</li>
</ul>
</li>
<li><p>2.成员变量和局部变量的区别</p>
<ul>
<li>成员变量：定义在类中，有初始值</li>
<li>局部变量：定义在方法中，无初始值</li>
</ul>
</li>
<li><p>3.方法的重载：OrverLoad</p>
<ul>
<li><p>相同点</p>
<ul>
<li>在同一个类中</li>
<li>同一个方法名</li>
</ul>
</li>
<li><p>不同点</p>
<ul>
<li>参数个数不同，参数顺序不同，参数类型不同</li>
</ul>
</li>
</ul>
</li>
<li><p>4.静态变量相当于全局变量</p>
<ul>
<li><p>类变量</p>
<ul>
<li>用static修饰的变量叫静态变量</li>
</ul>
</li>
<li><p>类方法</p>
<ul>
<li>用static修饰的方法叫静态方法</li>
</ul>
</li>
<li><p>静态块</p>
<ul>
<li>修饰代码块</li>
</ul>
</li>
<li><p>静态方法中只能调用静态变量</p>
</li>
<li>非静态方法中不能定义静态变量</li>
</ul>
</li>
<li><p>5.构造方法</p>
<ul>
<li>方法名和类名相同，没有返回值类型</li>
<li><p>构造方法的作用：</p>
<ul>
<li>1，实例化对象</li>
<li>2，给成员变量赋值</li>
</ul>
</li>
<li><p>1.使用new创建对象会自动调用构造方法</p>
<ul>
<li>Person person=new Person();</li>
</ul>
</li>
<li><p>2.3均属于反射机制</p>
<ul>
<li><p>2.使用Class类的newInstance方<em>*</em>调用构造方法</p>
<ul>
<li>Person person=(Person) Class.forName(“com.Person”).newInstance();</li>
</ul>
</li>
<li><p>3.用反射中的constructor类 的newInstance 调用构造方法</p>
<ul>
<li>Constructor  constructor=Person.class.getConstructor ();</li>
<li>Person person=constructor.newInstance();</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>案例 银行账户类的设计</p>
<p>/<em><br>技术要点<br>1 定义一个Account类 为类设计一个无参的构造方法和一个有参的构造方法<br>2 在创近岸账户对象，初始化账号、用户、余额和时间<br>存款和取款方法改变金额，并显示记录信息<br>4 在AccountManage类中创建两个对象进行测试
</em>/<br>import java.util.Scanner;<br>import java.util.InputMismatchException;<br>class IllegalDataException extends Exception<br>{</p>
<pre><code>public IllegalDataException()
&#123;
    super(&quot;数据无效&quot;);
&#125;
public IllegalDataException(String s)
&#123;
    super(s);
&#125;
</code></pre><p>}<br>class MyApp<br>{</p>
<pre><code>public double area(float a,float b,float c)throws IllegalDataException
&#123;
    if(a+b&gt;c&amp;&amp;a+c&gt;b&amp;&amp;b+c&gt;a)
    &#123;
        float p=(a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    &#125;
    else
    &#123;
        throw new IllegalDataException(&quot;三角形数据错误&quot;);
    &#125;
&#125;
</code></pre><p>}<br>public class Exam3_1银行账号<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    MyApp myapp=new MyApp();
    try
    &#123;
        double f1=myapp.area(3,4,5);
        System.out.println(f1);
        double f2=myapp.area(3,4,1);
        System.out.println(f2);
    &#125;
    catch(IllegalDataException ex)
    &#123;
        System.out.println(ex);
    &#125;
&#125;
</code></pre><p>}</p>
</li>
<li><p>案例 为银行账户类增加功能</p>
<p>/*<br>技术要点<br>1 定义一个Account类 为类设计一个无参的构造方法和一个有参的构造方法<br>2 在创近岸账户对象，初始化账号、用户、余额和时间<br>存款和取款方法改变金额，并显示记录信息<br>4 在AccountManage类中创建两个对象进行测试</p>
<p>V2.00<br>定义类变量numOfAccount和totalBalance，分别用于存储账号总量和银行总余额<br>定义一个私有方法newAccountNo()，用于在内部产生新的账户号，该方法用随机函数，后四位为计数值，不够4位前面补0<br>定义类方法用于访问存储账号总数和银行总余额<br>*/<br>import java.util.Scanner;<br>import java.util.InputMismatchException;<br>import java.util.Date;<br>class Account<br>{</p>
<pre><code>private String ownerName;
private String accountNo;
private double balance;
private Date datetime;
//+++
private static long numOfAccount;
private static double totalBalance;

public Account(String ownerName,String accountNo)
&#123;
    this(ownerName,accountNo,0);
&#125;
public Account(String ownerName,String accountNo,double balance)
&#123;
  this.numOfAccount++;
    this.ownerName=ownerName;
    this.accountNo=accountNo;
    this.balance=balance;
    this.datetime=new Date();
&#125;
//存款
public void disposit(double amount)
&#123;
    balance+=amount;
    String recordStr=String.format(&quot;%1$s %2$tF %2$tT 存款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
    System.out.println(recordStr);
&#125;
//取款
public void withdraw(double amount)
&#123;
    if(amount&gt;=balance)
    &#123;
        balance-=amount;
        String recordStr=String.format(&quot;%1$s %2$tF %2$tT 取款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
        System.out.println(recordStr);
    &#125;
    else
    &#123;
        System.out.println(&quot;余额不足&quot;);        
    &#125;
&#125;
public void show()
&#123;
    System.out.println(&quot;姓名：&quot;+ownerName);
    System.out.println(&quot;账号：&quot;+accountNo);
    System.out.println(&quot;当前余额：&quot;+new java.text.DecimalFormal(&quot;.00&quot;).format(balance));
    System.out.println(&quot;账号创建时间：&quot;+new java.text.SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;).format(datetime));
&#125;
public static long getNumOfAccount()
&#123;
    return numOfAccount;
&#125;
public static void setTotalBalance(double totalBalance)
&#123;
    this.totalBalance=totalBalance;
&#125;
public static double getTotalBalance()
&#123;
    return totalBalance;
&#125;
private String newAccountNo()
&#123;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i&lt;12;i++)
    &#123;
        sb.append((int)Math.random()*10);
    &#125;
    sb.append(String.format(&quot;%04d&quot;,numOfAccount));
    return sb.toString();
&#125;
</code></pre><p>}</p>
<p>public class Exam3_2为银行账户类添加功能<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    Account a1=new Account(&quot;10001&quot;,&quot;Tom&quot;,30);
    Account a2=new Account(&quot;10002&quot;,&quot;Mary&quot;);
    a1.desposit(60);
    a1.withdraw(10);
    a2.desposit(10);
    a1.show();
    a2.show();
&#125;
</code></pre><p>}</p>
</li>
</ul>
<h3 id="封装和继承"><a href="#封装和继承" class="headerlink" title="封装和继承"></a>封装和继承</h3><ul>
<li><p>1.封装的概念：</p>
<ul>
<li>将类的某些信息隐藏在类内部，不允许外部程序直接访问，</li>
<li>而是通过该类提供的方法来实现对隐藏信息的操作和访问。</li>
<li><p>封装的好处</p>
<ul>
<li>1，隐藏类的实现细节</li>
<li>2，方便加入控制语句</li>
<li>3，方便修改实现</li>
<li>4，只能通过规定方法访问数据</li>
</ul>
</li>
</ul>
</li>
<li><p>2.继承：extends</p>
<ul>
<li>继承是子类对父类的拓展，延伸</li>
<li><p>继承的特点：</p>
<ul>
<li>1，关键字 extends</li>
<li>2，java类没有多继承，只有单继承，但是可以多重继承</li>
<li>3，不能继承父类的三种情况 private成员、构造方法、子类与父类不在同包，使用默认访问权限的成员</li>
<li>4，java中所有的类的祖先都是Object类</li>
<li><p>5，不同的叫法 </p>
<ul>
<li>父类：基类，超类 </li>
<li>子类：派生类</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>3.super: 对父类对象的引用</p>
<ul>
<li><p>super(name)</p>
<ul>
<li>表示调用了父类的的有参构造方法。调用父类的构造方法，必须写在构造方法中的第一行</li>
<li>还可以使用super关键字直接调用父类的方法，如 super.print();(后面的学习还会具体讲)</li>
</ul>
</li>
</ul>
</li>
<li><p>4.final 最终的</p>
<ul>
<li>1，修饰变量、常量， 值不可改变</li>
<li>2，修饰方法， 不能被重写</li>
<li>3，修饰类， 不能被继承</li>
</ul>
</li>
<li><p>5.方法的重写</p>
<ul>
<li><p>重写的特点</p>
<ul>
<li>方法名 参数列表 返回值类型 必须和父类方法一致</li>
<li>访问权限不能比父类的更严格</li>
<li>@Override //注解 规定它下面的方法必须是重写的方法</li>
</ul>
</li>
</ul>
</li>
<li><p>完善银行账户类</p>
<p>/*<br>技术要点<br>1 定义一个Account类 为类设计一个无参的构造方法和一个有参的构造方法<br>2 在创近岸账户对象，初始化账号、用户、余额和时间<br>存款和取款方法改变金额，并显示记录信息<br>4 在AccountManage类中创建两个对象进行测试</p>
<p>V2.00<br>定义类变量numOfAccount和totalBalance，分别用于存储账号总量和银行总余额<br>定义一个私有方法newAccountNo()，用于在内部产生新的账户号，该方法用随机函数，后四位为计数值，不够4位前面补0<br>定义类方法用于访问存储账号总数和银行总余额<br>*/<br>import java.util.Scanner;<br>import java.util.InputMismatchException;<br>import java.util.Date;<br>class Account<br>{</p>
<pre><code>private String ownerName;
private String accountNo;
private double balance;
private Date datetime;
//+++
private static long numOfAccount;
private static double totalBalance;

public Account(String ownerName,String accountNo)
&#123;
    this(ownerName,accountNo,0);
&#125;
public Account(String ownerName,String accountNo,double balance)
&#123;
  this.numOfAccount++;
    this.ownerName=ownerName;
    this.accountNo=accountNo;
    this.balance=balance;
    this.datetime=new Date();
&#125;
//存款
public void disposit(double amount)
&#123;
    balance+=amount;
    String recordStr=String.format(&quot;%1$s %2$tF %2$tT 存款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
    System.out.println(recordStr);
&#125;
//取款
public void withdraw(double amount)
&#123;
    if(amount&gt;=balance)
    &#123;
        balance-=amount;
        String recordStr=String.format(&quot;%1$s %2$tF %2$tT 取款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
        System.out.println(recordStr);
    &#125;
    else
    &#123;
        System.out.println(&quot;余额不足&quot;);        
    &#125;
&#125;
public void show()
&#123;
    System.out.println(&quot;姓名：&quot;+ownerName);
    System.out.println(&quot;账号：&quot;+accountNo);
    System.out.println(&quot;当前余额：&quot;+new java.text.DecimalFormal(&quot;.00&quot;).format(balance));
    System.out.println(&quot;账号创建时间：&quot;+new java.text.SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;).format(datetime));
&#125;
public static long getNumOfAccount()
&#123;
    return numOfAccount;
&#125;
public static void setTotalBalance(double totalBalance)
&#123;
    this.totalBalance=totalBalance;
&#125;
public static double getTotalBalance()
&#123;
    return totalBalance;
&#125;
private String newAccountNo()
&#123;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i&lt;12;i++)
    &#123;
        sb.append((int)Math.random()*10);
    &#125;
    sb.append(String.format(&quot;%04d&quot;,numOfAccount));
    return sb.toString();
&#125;
</code></pre><p>}</p>
<p>public class Exam3_3完善银行账户类<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    Account a1=new Account(&quot;10001&quot;,&quot;Tom&quot;,30);
    Account a2=new Account(&quot;10002&quot;,&quot;Mary&quot;);
    a1.desposit(60);
    a1.withdraw(10);
    a2.desposit(10);
    a1.show();
    a2.show();
&#125;
</code></pre><p>}</p>
</li>
</ul>
<h3 id="抽象与接口"><a href="#抽象与接口" class="headerlink" title="抽象与接口"></a>抽象与接口</h3><ul>
<li><p>抽象和多态</p>
<ul>
<li><p>1.抽象（abstract）</p>
<ul>
<li><p>1，意义</p>
<ul>
<li>抽象类是一种不完全规范，规定子类必须具备哪些方法</li>
</ul>
</li>
<li><p>2，特点</p>
<ul>
<li>抽象类中可以有普通属性和普通方法</li>
<li>抽象类中有构造方法，但是不能实例化</li>
<li>抽象类只能被继承</li>
<li>抽象方法只能被子类重写或者子类继续抽象</li>
<li>有抽象方法的类必须是抽象类</li>
<li>抽象类中不一定有抽象方法</li>
</ul>
</li>
</ul>
</li>
<li><p>2.多态</p>
<ul>
<li><p>什么是多态：</p>
<ul>
<li><p>生活中的多态</p>
<ul>
<li>不同类型的打印机打印效果不同 如下图：</li>
</ul>
</li>
<li><p>程序中的多态：</p>
<ul>
<li>一个对象在不同的载体中呈现不同的形态。</li>
<li>同一个引用类型，调用同一个方法，得到不同的结果。</li>
</ul>
</li>
</ul>
</li>
<li><p>1，形参多态的必要条件</p>
<ul>
<li>1，要有继承关系</li>
<li>2，要有方法的重写</li>
<li>3，父类的引用指向子类的对象,</li>
</ul>
</li>
<li><p>2，用途</p>
<ul>
<li>可以减少类中的代码量</li>
<li>可以提高代码的可拓展性和可维护性</li>
</ul>
</li>
<li><p>3.使用父类作为方法形参和使用父类作为返回值类型是使用多态的常用方式。</p>
</li>
</ul>
</li>
<li><p>3.转型</p>
<ul>
<li><p>1，向上转型</p>
<ul>
<li>把子类转换为父类，属于自动类型转换。</li>
</ul>
</li>
<li><p>2，向下转型</p>
<ul>
<li>把父类转换为子类，必须强制类型转换。</li>
</ul>
</li>
<li><p>注意：</p>
<ul>
<li><p>1，向上转型后通过父类引用变量调用的方法是子类覆盖或继承父类的方法，</p>
<ul>
<li>通过父类引用变量无法调用子类特有的方法。</li>
</ul>
</li>
<li><p>2，向下转型后可以访问子类特有的方法，必须转换为父类指向的真实子类类型，</p>
<ul>
<li>否则将出现转换异常（ClassCastException）。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>4.instanceof:</p>
<ul>
<li>运算符用于判断一个对象是否属于一个类或实现一个接口。instanceof:运算符通常和强制类型转换结合使用，先通过instanceof进行类型判断，再进行相应的强制类型转换。</li>
</ul>
</li>
</ul>
</li>
<li><p>接口</p>
<ul>
<li><p>1,接口的定义(interface)：</p>
<ul>
<li>是一种强制性（完全）的规范。</li>
<li>接口不是一个类，</li>
<li>定义一系列的属性（静态常量）和行为（抽象方法）</li>
</ul>
</li>
<li><p>2,接口的特征:</p>
<ul>
<li>1.不能被实例化，接口没有构造方法</li>
<li>2.接口只能被实现implements 或者继续定义为接口</li>
<li>3.接口中的属性默认是 public static fianl 修饰的静态常量</li>
<li>4.接口中的方法默认是 public abstract 修饰的抽象方法</li>
<li><ol>
<li>只能有抽象方法</li>
</ol>
</li>
<li><ol>
<li>接口中的方法必须被子类重写</li>
</ol>
</li>
<li><p>7.一个类实现多个接口用逗号隔开</p>
<ul>
<li>public class Man implements IPerson,Program</li>
</ul>
</li>
<li><p>8.如果一个类有继承又有实现，那么是先继承再实现</p>
</li>
<li>9.接口可以继承多个接口，用逗号隔开！</li>
</ul>
</li>
<li><p>3,类与其他的关系</p>
<ul>
<li><p>继承关系</p>
<ul>
<li>类和类的关系</li>
<li>可以继承多个接口</li>
</ul>
</li>
<li><p>实现关系</p>
<ul>
<li>类和接口的关系</li>
</ul>
</li>
<li><p>接口和接口的关系</p>
<ul>
<li>一个类可以实现多个接口</li>
</ul>
</li>
</ul>
</li>
<li><p>4,类只能继承一个父类</p>
<ul>
<li>但可以实现多个接口，一个类如果实现了一个接口，则必须 实现接口中的全部方法，否则必须将其定义为抽象类。Java通过实现接口达到了多重继承的效果。</li>
</ul>
</li>
<li><p>5，接口表示一种约定，接口表示一种能力，接口体现了约定和实现相分离的原则。</p>
</li>
<li>6，抽象类利于代码复用，接口利于代码维护。</li>
<li><p>7.面向接口编程</p>
<ul>
<li>1，通过面向接口编程，可以降低代码间的耦合性，提高代码的可拓展性和可维护性。</li>
<li>2，面向接口编程意味着：开发系统时，主体构架使用接口，接口构成系统的骨架，这样就可以 通过更换实现接口的类来实现更换系统。</li>
</ul>
</li>
<li><p>8.接口有比抽象类更好的特性：</p>
<ul>
<li>1，可以被多继承</li>
<li>2，设计和实现完全分离</li>
<li>3，更自然的使用多态</li>
<li>4，更容易搭建程序框架</li>
<li>5，更容易更换实现</li>
</ul>
</li>
<li><p>9.接口和抽象类的区别：</p>
<ul>
<li>1，接口不是类，抽象是是一个类</li>
<li>2，接口没有构造方法，抽象类有构造方法 ，都不可以实例化</li>
<li>3，接口只能被实现 ，抽象类只能被继承</li>
<li>4，接口中只能有公共的静态常量和公共的抽象方法，抽象类中可以有普通的属性和方法</li>
<li>5，接口可以多实现（多继承），抽象类只能单继承</li>
</ul>
</li>
</ul>
</li>
<li><p>案例 为绘图程序设计一个图片类</p>
<p>/<em><br>技术要点<br>1 需要的类有线段 矩形 椭圆，任意画通过管线实现<br>利用java的继承构建图形类，先定义hape类，包含图形共有的成员变量x1x2y1y2colorthickfilltype分别表示坐标颜色线条粗细填充方式<br>Line Rect Oval有Shape派生
</em>/<br>import java.awt.Color;<br>public interface IShape<br>{</p>
<pre><code>enum ShapeType&#123;DRAM,LINE,RECT,OVAL&#125;;
enum FillType(FILL,NO_FILL);
void draw(Graphics2D g);
</code></pre><p>}<br>public abstract class Shape implements IShape<br>{</p>
<pre><code>private String ownerName;
private String accountNo;
private double balance;
private Date datetime;
//+++
private static long numOfAccount;
private static double totalBalance;

public Account(String ownerName,String accountNo)
&#123;
    this(ownerName,accountNo,0);
&#125;
public Account(String ownerName,String accountNo,double balance)
&#123;
  this.numOfAccount++;
    this.ownerName=ownerName;
    this.accountNo=accountNo;
    this.balance=balance;
    this.datetime=new Date();
&#125;
//存款
public void disposit(double amount)
&#123;
    balance+=amount;
    String recordStr=String.format(&quot;%1$s %2$tF %2$tT 存款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
    System.out.println(recordStr);
&#125;
//取款
public void withdraw(double amount)
&#123;
    if(amount&gt;=balance)
    &#123;
        balance-=amount;
        String recordStr=String.format(&quot;%1$s %2$tF %2$tT 取款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
        System.out.println(recordStr);
    &#125;
    else
    &#123;
        System.out.println(&quot;余额不足&quot;);        
    &#125;
&#125;
public void show()
&#123;
    System.out.println(&quot;姓名：&quot;+ownerName);
    System.out.println(&quot;账号：&quot;+accountNo);
    System.out.println(&quot;当前余额：&quot;+new java.text.DecimalFormal(&quot;.00&quot;).format(balance));
    System.out.println(&quot;账号创建时间：&quot;+new java.text.SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;).format(datetime));
&#125;
public static long getNumOfAccount()
&#123;
    return numOfAccount;
&#125;
public static void setTotalBalance(double totalBalance)
&#123;
    this.totalBalance=totalBalance;
&#125;
public static double getTotalBalance()
&#123;
    return totalBalance;
&#125;
private String newAccountNo()
&#123;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i&lt;12;i++)
    &#123;
        sb.append((int)Math.random()*10);
    &#125;
    sb.append(String.format(&quot;%04d&quot;,numOfAccount));
    return sb.toString();
&#125;
</code></pre><p>}</p>
<p>public class Exam3_4为绘图软件设计一组图形类<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    Account a1=new Account(&quot;10001&quot;,&quot;Tom&quot;,30);
    Account a2=new Account(&quot;10002&quot;,&quot;Mary&quot;);
    a1.desposit(60);
    a1.withdraw(10);
    a2.desposit(10);
    a1.show();
    a2.show();
&#125;
</code></pre><p>}</p>
</li>
</ul>
<h3 id="作业"><a href="#作业" class="headerlink" title="作业"></a>作业</h3><ul>
<li><p>设计一个point类 要求求俩点间距离</p>
<p>public class Point<br>{</p>
<pre><code>public double x,y;
public Point()
&#123;&#125;
public double distance(Point b)
&#123;
    return Math.sqrt((this.x-b.x)*(this.x-b.x)+(this.y-b.y)*(this.y-b.y));
&#125;
</code></pre><p>}</p>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/" data-id="cl403sxr3001bf8vu3wp9h04z" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第二章 控制结构与异常处理" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E6%8E%A7%E5%88%B6%E7%BB%93%E6%9E%84%E4%B8%8E%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:27:13.494Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第二章-控制结构与异常处理"><a href="#第二章-控制结构与异常处理" class="headerlink" title="第二章 控制结构与异常处理"></a>第二章 控制结构与异常处理</h2><h3 id="控制结构"><a href="#控制结构" class="headerlink" title="控制结构"></a>控制结构</h3><ul>
<li><p>分支结构</p>
<ul>
<li><p>if</p>
<ul>
<li><p>案例求解一元二次方程</p>
<p>import java.util.Date;<br>import java.text.DecimalFormat;<br>public class Exam2_1<br>{</p>
<pre><code>public static void getRoot(double a,double b,double c)
&#123;
    if(a!=0)
    &#123;
        double d=b*b-4*a*c;
        DecimalFormat df=new DecimalFormat(&quot;0.000&quot;);//

        if(d&gt;0)
        &#123;
            double x1=(-b+Math.sqrt(d))/(2*a);
            double x2=(-b-Math.sqrt(d))/(2*a);
            System.out.println(&quot;x1=&quot;+df.format(x1)+&quot; x2=&quot;+df.format(x2));
        &#125;
        if(d==0)
            System.out.println(&quot;x1=x2=&quot;+df.format(-b/(2*a)));

        else
        &#123;
            double real=-b/(2*a);
            double image=Math.sqrt(-d)/(2*a);
            System.out.println(&quot;x1=&quot;+df.format(real)+&quot;+&quot;+df.format(image));
            System.out.println(&quot;x2=&quot;+df.format(real)+&quot;-&quot;+df.format(image));
        &#125;
    &#125;
    else
    &#123;
        System.out.println(&quot;不是二次方程&quot;);
    &#125;
&#125;
public static void main(String args[])
&#123;
    getRoot(4,4,1);
    getRoot(1,5,6);
    getRoot(10,1,2);
    getRoot(0,2,3);
&#125;
</code></pre><p>}</p>
</li>
</ul>
</li>
<li><p>switch</p>
<ul>
<li><p>求下一天的日期</p>
<p>public class Exam2_2求下一天的日期<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    int y,m,d;
    int dnum=0;
    boolean isLeap=false;
    Scanner scanner=new Scanner(System.in);
    String data=scanner.nextLine();
    String ymd[]=data.split(&quot;-&quot;);
    y=Integer.parseInt(ymd[0]);
    m=Integer.parseInt(ymd[1]);
    d=Integer.parseInt(ymd[2]);
    if(y&lt;1000||y&gt;9999||m&lt;1||m&gt;12)
    &#123;
        System.out.println(&quot;日期不合法&quot;);
        return;
    &#125;
    if((y%400==0)||(y%4==0&amp;&amp;y%100!=0))
    &#123;
        isLeap=true;
    &#125;

    switch(m)
    &#123;
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            dnum=31;
            break;
        case 2:
            if(isLeap)
            &#123;
                dnum=29;
            &#125;
            else
                dnum=28;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            dnum=30;
            break;
    &#125;

    if(d&lt;1||d&gt;dnum)
    &#123;
        System.out.println(&quot;日期不合法&quot;);
        return;
    &#125;

    if(d!=dnum)
    &#123;
        d++;
    &#125;
    else
    &#123;
        if(m==12)
        &#123;
            y++;
            m=1;
            d=1;
        &#125;
        else
        &#123;
            m++;
            d=1;
        &#125;
    &#125;
    System.out.println(y+&quot;-&quot;+m+&quot;-&quot;+d);

&#125;
</code></pre><p>}</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>循环结构</p>
<ul>
<li><p>for</p>
<ul>
<li><p>求素数</p>
<p>public class Exam2_3求素数<br>{</p>
<pre><code>public static boolean isprim(int num)
&#123;
    for(int j=num-1;j&gt;1;j--)
    &#123;
        if(num%j==0)
            return false;
    &#125;
    return true;
&#125;

public static void main(String args[])
&#123;
    for(int i=2;i&lt;101;i++)
    &#123;
        if(isprim(i))
            System.out.println(i);
    &#125;
&#125;
</code></pre><p>}</p>
</li>
</ul>
</li>
<li><p>while</p>
<ul>
<li><p>sin、</p>
<p>public class Exam2_4sinx<br>{</p>
<pre><code>public static double f1(double x)
&#123;
    double s=0;
    double t=x;
    int n=0;
    while(Math.abs(t)&gt;=0.0001)
    &#123;
        s=s+t;
        t=(-1)*t*x*x/((n+1)*(n+2));
        n=n+2;
    &#125;
    return s;
&#125;
public static void main(String args[])
&#123;
    System.out.println(f1(2));
    System.out.println(Math.sin(2));
&#125;
</code></pre><p>}</p>
</li>
<li><p>进制转换</p>
<p>public class Exam2_5进制转换<br>{</p>
<pre><code>public static double f1(double x)
&#123;
    double s=0;
    double t=x;
    int n=0;
    while(Math.abs(t)&gt;=0.0001)
    &#123;
        s=s+t;
        t=(-1)*t*x*x/((n+1)*(n+2));
        n=n+2;
    &#125;
    return s;
&#125;
public static void main(String args[])
&#123;
    System.out.println(f1(2));
    System.out.println(Math.sin(2));
&#125;
</code></pre><p>}</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="异常处理"><a href="#异常处理" class="headerlink" title="异常处理"></a>异常处理</h3><ul>
<li><p>异常及其体系</p>
<ul>
<li><p>编译错误</p>
<ul>
<li>没有遵循语言的规则，有编译程序检查发现</li>
</ul>
</li>
<li><p>运行错误</p>
<ul>
<li>环境中发现一个不可执行的操作</li>
</ul>
</li>
<li><p>逻辑错误</p>
<ul>
<li>程序没有按预期的方案执行</li>
</ul>
</li>
</ul>
</li>
<li><p>throwable</p>
<ul>
<li><p>Exception</p>
<ul>
<li><p>IOException</p>
<ul>
<li>FileNotFoundException</li>
<li>EOFException</li>
</ul>
</li>
<li><p>AWTException</p>
</li>
<li>ClassNotFoundException</li>
<li><p>interruptedException</p>
<ul>
<li>java.lang.Object 类的 wait 方法</li>
<li>java.lang.Thread 类的 sleep 方法</li>
<li>java.lang.Thread 类的 join 方法</li>
</ul>
</li>
<li><p>RunTimeException不需要程序员进行捕获处理</p>
<ul>
<li><p>IndexOutOfBoundsException</p>
<ul>
<li>ArrayIndexOutOfBoundsException</li>
</ul>
</li>
<li><p>ArthrnetieException</p>
</li>
<li>NullPointerException</li>
<li><p>IllegalArgumentrException</p>
<ul>
<li>NumberFormatException</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Error 是系统出错，catch是无法处理的，难以修复的</p>
<ul>
<li>virtualmachineerror</li>
<li>awterror</li>
<li>linkageerror</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="异常处理机制"><a href="#异常处理机制" class="headerlink" title="异常处理机制"></a>异常处理机制</h3><ul>
<li><p>java采用一个相对简单的统一的抛出和处理机制 堆栈传递解决</p>
<ul>
<li><p>1.try和catch语句</p>
<ul>
<li>●将要处理的代码放入try块中，然后创建相应的catch块的列表。如果生成都异常与catch中提到的相匹配，那么catch条件中的块语句就被执行。try块后可能有许多catch块，每个都处理不同的异常。每个catch中的参数都是Exception的子类。</li>
</ul>
</li>
<li><p>2.finally语句</p>
<ul>
<li>●finally语句定义一个总是执行的代码，而不考虑异常是否被捕获。</li>
</ul>
</li>
<li><p>3.throw引起一个异常</p>
<ul>
<li>‍●‍‍调用申明抛出异常</li>
<li>●‍throw语句强制抛出异常</li>
</ul>
</li>
</ul>
</li>
<li><p>整数的算术运算</p>
<p>public static void main(String args[])</p>
<pre><code>&#123;
    int x,y;
    int result=0;
    String op;
    try
    &#123;
        Scanner scanner=new Scanner(System.in);
        x=scanner.nextInt();
        op=scanner.next();
        y=scanner.nextInt();
        if(op.equals(&quot;+&quot;))
        &#123;
            result=x+y;
        &#125;
        else if(op.equals(&quot;-&quot;))
        &#123;
            result=x-y;
        &#125;
        else if(op.equals(&quot;*&quot;))
        &#123;
            result=x*y;
        &#125;
        else if(op.equals(&quot;/&quot;))
        &#123;
            result=x/y;
        &#125;
        else 
        &#123;
            throw new Exception();
        &#125;
        System.out.println(x+op+y+&quot;=&quot;+result);
    &#125;
    catch(InputMismatchException ex)
    &#123;
        System.out.println(&quot;数据错误&quot;);
    &#125;
    catch(ArithmeticException ex)
    &#123;
        System.out.println(&quot;除零错误&quot;);
    &#125;
    catch(Exception ex)
    &#123;
        System.out.println(&quot;运算甫错误&quot;);
    &#125;
&#125;
</code></pre><p>}</p>
</li>
<li><p>求三角形面积</p>
<p>class IllegalDataException extends Exception<br>{</p>
<pre><code>public IllegalDataException()
&#123;
    super(&quot;数据无效&quot;);
&#125;
public IllegalDataException(String s)
&#123;
    super(s);
&#125;
</code></pre><p>}<br>class MyApp<br>{</p>
<pre><code>public double area(float a,float b,float c)throws IllegalDataException
&#123;
    if(a+b&gt;c&amp;&amp;a+c&gt;b&amp;&amp;b+c&gt;a)
    &#123;
        float p=(a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    &#125;
    else
    &#123;
        throw new IllegalDataException(&quot;三角形数据错误&quot;);
    &#125;
&#125;
</code></pre><p>}<br>public class Exam2_7求三角形面积<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    MyApp myapp=new MyApp();
    try
    &#123;
        double f1=myapp.area(3,4,5);
        System.out.println(f1);
        double f2=myapp.area(3,4,1);
        System.out.println(f2);
    &#125;
    catch(IllegalDataException ex)
    &#123;
        System.out.println(ex);
    &#125;
&#125;
</code></pre><p>}</p>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E6%8E%A7%E5%88%B6%E7%BB%93%E6%9E%84%E4%B8%8E%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/" data-id="cl403sxra001nf8vu4ws890ne" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/第一章 引言" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E5%BC%95%E8%A8%80/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:27:04.955Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第一章-引言"><a href="#第一章-引言" class="headerlink" title="第一章 引言"></a>第一章 引言</h2><h3 id="面向对象的三大特征"><a href="#面向对象的三大特征" class="headerlink" title="面向对象的三大特征"></a>面向对象的三大特征</h3><ul>
<li>封装 (Encapsulation)</li>
<li>继承 (Inheritance)</li>
<li>多态 (Polymorphism)</li>
</ul>
<h3 id="编程思想"><a href="#编程思想" class="headerlink" title="编程思想"></a>编程思想</h3><ul>
<li><p>面向过程</p>
<ul>
<li>做某件事情都需要自己亲历亲为，按照步骤去完成</li>
</ul>
</li>
<li><p>面向对象</p>
<ul>
<li>做某件事情不需要自己亲历亲为，只需指定特定的对象去完成即可。</li>
<li>1.现实世界就是由对象组成的</li>
<li><p>2.面向对象设计和开发程序的好处</p>
<ul>
<li>1.交流更加流畅</li>
<li>2.提高设计和开发效率</li>
<li>3.面向对象的思想符合人类思维习惯</li>
</ul>
</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E5%BC%95%E8%A8%80/" data-id="cl403sxqz0012f8vudsq39kgc" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-Java/序言 操作系统及语言介绍" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E5%BA%8F%E8%A8%80%20%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%8F%8A%E8%AF%AD%E8%A8%80%E4%BB%8B%E7%BB%8D/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:26:51.580Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="序言-操作系统及语言介绍"><a href="#序言-操作系统及语言介绍" class="headerlink" title="序言 操作系统及语言介绍"></a>序言 操作系统及语言介绍</h2><h3 id="操作系统"><a href="#操作系统" class="headerlink" title="操作系统"></a>操作系统</h3><ul>
<li><p>PC</p>
<ul>
<li><p>Window</p>
<ul>
<li>图形化优势</li>
</ul>
</li>
<li><p>Linux</p>
<ul>
<li>服务器 </li>
</ul>
</li>
<li><p>Unix</p>
<ul>
<li>1970年 游戏打出来的</li>
<li>minix：大学课堂专用</li>
</ul>
</li>
<li><p>MAC</p>
</li>
</ul>
</li>
<li><p>移动端</p>
<ul>
<li>android（java）</li>
<li>IOS</li>
</ul>
</li>
<li><p>虚拟机</p>
<ul>
<li>模拟一个真实的软硬件环境</li>
</ul>
</li>
</ul>
<h3 id="语言的发展历史"><a href="#语言的发展历史" class="headerlink" title="语言的发展历史"></a>语言的发展历史</h3><ul>
<li>Java语言发展史</li>
<li>Java语言跨平台原理</li>
<li>JRE和JDK</li>
<li>JDK的下载和安装 </li>
<li><p>1.1、Java语言</p>
<ul>
<li>2009年，Sun公司被甲骨文公司收购，所以现在访问oracle官网即可：<a target="_blank" rel="noopener" href="https://www.oracle.com">https://www.oracle.com</a></li>
</ul>
</li>
<li><p>1.2、Java语言发展史</p>
</li>
</ul>
<h3 id="Java语言跨平台原理（理解）"><a href="#Java语言跨平台原理（理解）" class="headerlink" title="Java语言跨平台原理（理解）"></a>Java语言跨平台原理（理解）</h3><ul>
<li>Java程序并非是直接运行的，Java编译器将Java源程序编译成与平台无关的字节码文件(class文件)，然后由Java虚拟机（JVM）对字节码文件解释执行。所以，在不同的操作系统下，只需安装不同的Java虚拟机即可实现java程序的跨平台。</li>
<li><p>2.1、平台</p>
<ul>
<li>指的是操作系统：Windows、Mac、Linux</li>
</ul>
</li>
<li><p>2.2、跨平台</p>
<ul>
<li>Java程序可以在任意操作系统上运行。</li>
</ul>
</li>
<li><p>2.3、跨平台原理</p>
<ul>
<li>翻译作用：Java虚拟机</li>
</ul>
</li>
</ul>
<h3 id="003-JRE和JDK（记忆）"><a href="#003-JRE和JDK（记忆）" class="headerlink" title="003_JRE和JDK（记忆）"></a>003_JRE和JDK（记忆）</h3><ul>
<li>JVM（Java Virtual Machine），Java虚拟机</li>
<li>JRE（Java Runtime Environment），Java运行环境，包含了JVM和Java的核心类库（Java API）</li>
<li>JDK（Java Development Kit）称为Java开发工具，包含了JRE和开发工具</li>
<li><p>3.1、JRE（Java Runtime Environment）</p>
<ul>
<li>是Java程序的运行时环境，包含JVM和运行时所需要的核心类库。</li>
</ul>
</li>
<li><p>3.2、JDK（Java Development Kit）</p>
<ul>
<li>是Java程序开发工具包，包含JRE和开发人员使用的工具。</li>
</ul>
</li>
<li><p>3.3、JDK、JRE和JVM的关系</p>
<ul>
<li>JDK：开发环境，包含 JRE 和 开发工具。</li>
<li>JVM：保证Java程序的跨平台。</li>
</ul>
</li>
</ul>
<h3 id="机器语言"><a href="#机器语言" class="headerlink" title="机器语言"></a>机器语言</h3><ul>
<li>高电平</li>
<li>低电平 </li>
</ul>
<h3 id="汇编语言"><a href="#汇编语言" class="headerlink" title="汇编语言"></a>汇编语言</h3><ul>
<li>助记符</li>
</ul>
<h3 id="高级语言BCLP"><a href="#高级语言BCLP" class="headerlink" title="高级语言BCLP"></a>高级语言BCLP</h3><ul>
<li><p>编程语言</p>
<ul>
<li>c</li>
<li>c++</li>
<li>c# 1989</li>
<li><p>java 1995年爪哇岛（java之父）</p>
<ul>
<li><p>Java语言版本</p>
<ul>
<li>1998 1.2</li>
<li>2004 1.5</li>
<li>2009 1.7 较稳定</li>
<li>2014 1.8</li>
<li>2017 9.0</li>
</ul>
</li>
<li><p>Java语言领域</p>
<ul>
<li><p>传统软件</p>
<ul>
<li>OA：办公自动化（管理软件）</li>
<li>ERP：员工管理系统</li>
<li>CRM：客户关系管理系统</li>
<li>通讯程序</li>
<li>单机版游戏，cs架构游戏</li>
</ul>
</li>
<li><p>互联网行业</p>
<ul>
<li>金融产品管理</li>
<li>银行系统</li>
<li>移动</li>
<li>小程序</li>
</ul>
</li>
<li><p>各行业</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>脚本语言</p>
<ul>
<li>python 吉多</li>
</ul>
</li>
</ul>
<h3 id="计算机的基础知识"><a href="#计算机的基础知识" class="headerlink" title="计算机的基础知识"></a>计算机的基础知识</h3><ul>
<li>进制转换</li>
<li>字节介绍</li>
<li><p>DOS</p>
<ul>
<li>命令提示符</li>
<li><p>快捷键</p>
<ul>
<li>win+e 我的电脑</li>
<li>win+d 回到桌面</li>
<li>ctrl+x</li>
<li>ctrl+z</li>
</ul>
</li>
</ul>
</li>
<li><p>java源码不跨平台</p>
<ul>
<li>.class一处编译到处执行</li>
<li>关键词</li>
<li>标识符 </li>
<li>命名规范</li>
</ul>
</li>
<li><p>JDK的安装目录</p>
<ul>
<li>bin目录    包含一些用于开发Java程序的工具，例如：编译工具(javac.exe)、运行工具 (java.exe) 、打包工具 (jar.exe)等。</li>
<li>db目录    纯Java开发的数据可 Derby，是一个开源的100%Java开发的关系数据库。</li>
<li>include目录    C语言的头文件，用于支持Java程序设计。</li>
<li>jre目录    Java运行时环境的根目录。</li>
<li>jre\bin目录    包含Java平台所使用工具和类库的可执行文件和DLL文件。</li>
<li>jre\lib目录    Java运行时环境所使用的核心类库。</li>
<li>lib目录    包含开发Java程序所使用的类库文件。</li>
<li>src.zip    归档的Java源代码</li>
</ul>
</li>
</ul>
<h3 id="常量"><a href="#常量" class="headerlink" title="常量"></a>常量</h3><h3 id="变量"><a href="#变量" class="headerlink" title="变量"></a>变量</h3><ul>
<li>数据类型</li>
<li>本质原理</li>
</ul>
<h3 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h3><ul>
<li>算术运算符</li>
<li>四则运算</li>
<li>比较运算符</li>
<li>关系运算符</li>
<li>逻辑运算符</li>
<li><p>位运算符</p>
<ul>
<li>左移</li>
<li>右移</li>
</ul>
</li>
<li><p>三元运算符</p>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E5%BA%8F%E8%A8%80%20%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%8F%8A%E8%AF%AD%E8%A8%80%E4%BB%8B%E7%BB%8D/" data-id="cl403sxqy0011f8vu7o0z95wf" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-创造模式/行为型设计模式/访问者设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AE%BF%E9%97%AE%E8%80%85%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:31:14.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AE%BF%E9%97%AE%E8%80%85%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">访问者设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%AE%BF%E9%97%AE%E8%80%85%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt0005kf8vu4jzg52db" data-title="访问者设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  


  <nav id="page-nav">
    
    <a class="extend prev" rel="prev" href="/notes-on-computer-expertise/page/9/">&laquo; Prev</a><a class="page-number" href="/notes-on-computer-expertise/">1</a><span class="space">&hellip;</span><a class="page-number" href="/notes-on-computer-expertise/page/8/">8</a><a class="page-number" href="/notes-on-computer-expertise/page/9/">9</a><span class="page-number current">10</span><a class="page-number" href="/notes-on-computer-expertise/page/11/">11</a><a class="page-number" href="/notes-on-computer-expertise/page/12/">12</a><span class="space">&hellip;</span><a class="page-number" href="/notes-on-computer-expertise/page/14/">14</a><a class="extend next" rel="next" href="/notes-on-computer-expertise/page/11/">Next &raquo;</a>
  </nav>

</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C#工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C++工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/Mysql/">Mysql</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/blender/">blender</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/manim/">manim</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/spring/">spring</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C/">vba基础操作</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/">创造模式</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">操作系统</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/">操作系统开发</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">数据结构基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%A8%A1%E6%9D%BF/">模板</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/">深度学习</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%8B%B1%E8%AF%AD/">英语</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%99%9A%E5%B9%BB4/">虚幻4</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/">计算机组成原理</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/notes-on-computer-expertise/tags/C/" rel="tag">C++</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/notes-on-computer-expertise/tags/C/" style="font-size: 10px;">C++</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/05/">May 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/03/">March 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/02/">February 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/01/">January 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2021/12/">December 2021</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/31/vue/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E9%AA%8C%E8%AF%81%E7%A0%81%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/26/%E6%95%B0%E6%8D%AE%E5%BA%93/navicat%E5%AE%89%E8%A3%85/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/25/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E8%99%9A%E5%B9%BB%E5%9B%9B%20mod%E5%88%B6%E4%BD%9C/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/python/python%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0/EXCEL%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/">(no title)</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2022 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/notes-on-computer-expertise/" class="mobile-nav-link">Home</a>
  
    <a href="/notes-on-computer-expertise/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/notes-on-computer-expertise/js/jquery-3.4.1.min.js"></script>



  
<script src="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.js"></script>




<script src="/notes-on-computer-expertise/js/script.js"></script>





  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>